package com.hspedu.poly_.dynamic;

/**
 * @Author Stringzhua
 * @Date 2024/3/2 19:09
 * description:java的动态绑定机制
 * 当调用方法时,该方法会和该对象的内存地址/运行类型进行绑定
 * 当调用属性时,没有动态绑定机制,哪里声明,哪里使用
 */
public class DynamicBinding {
    public static void main(String[] args) {
        //a的编译类型A 运行类型B
        A a = new B();//向上转型
        System.out.println(a.sum());//40->30
        System.out.println(a.sum1());//30->20
    }
}

class A {//父类
    public int i = 10;

    public int sum() {
        return getl() + 10;//20+10
        // 此处由于在子类中没有找到sum方法,于是在父类中找,但是这里的getl方法调用的是子类的getl
    }

    public int sum1() {
        return i + 10;//10+10
    }

    public int getl() {//父类的getI
        return i;
    }
}

class B extends A {//子类
    public int i = 20;

    public int sum() {//动态方法
        return getl() + 20;
    }
//
//    public int sum1() {
//        return i + 10;
//    }

    public int getl() {//子类的getI
        return i;//静态属性
    }
}
